SMART STORAGE SOLUTIONS

Add efficiency to your warehouse with intelligent space management

Contact

Mecalux: experience and innovation for your warehouse

Mecalux is one of the leading intralogistics technology companies worldwide. It is at the cutting edge of warehouse automation and software development. Its metal shelves are also synonymous with quality in the industry.
We are backed by 55 years of experience, a determined commitment to innovation and — most importantly — our customers' satisfaction. Whatever the characteristics of your business, we have a storage solution for you.
Background Gartner

Mecalux named — for the fourth year in a row — in the 2024 Gartner® Magic Quadrant™ for Warehouse Management Systems

DOWNLOAD REPORT
An error occurred while processing the template.
Java method "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl.getStructureFieldValues(com.liferay.journal.model.JournalArticle, String)" threw an exception when invoked on com.mecalux.util.service.impl.MlxJournalHelperServiceImpl object "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl@5b4d0a0b"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign articleValues = mlxJournalHel...  [in template "20101#20128#3282409" at line 15, column 25]
----
1<#if mlxUrlUtilService?has_content> 
2    <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
3<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
4     
5    <#if entries?has_content> 
6            <div class="corporate--v3--slider--v1"> 
7            <div class="corporate--v3--slider--v1--container" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--v3--slider--v1--slider", "navPosition": "bottom", "mouseDrag": true,"loop":false, "controls": false}' data-gtm-block-name="Case_Study"> 
8                <h2 class="corporate--v3--slider--v1--title"><@corporate.mlxlanguage key="mlx.breadcrumb.practical-cases" /></h2> 
9                <div class="corporate--v3--slider--v1--slider" data-gtm-block-name="Case_Study"> 
10                     
11                    <#assign itemIndex = 0 /> 
12                    <#list entries as curEntry> 
13     
14                        <#assign article = mlxAssetHelperService.getJournalArticleByEntry(curEntry) /> 
15                        <#assign articleValues =  mlxJournalHelperService.getStructureFieldValues(article, "${locale}") /> 
16                        <#assign articleUrl = mlxUrlUtilService.getUrlByJournalArticle(article, "${locale}", groupId)?string /> 
17                        <#assign articleName = (articleValues["name"]?string)!"" /> 
18                        <#assign articleDescription = (articleValues["html_description"]?string)!"" /> 
19     
20                        <#assign clientStrKey = "CLIENT-STR" /> 
21                        <#assign articleClient = (mlxAssetHelperService.getFirstRelatedArticle(groupId, article.articleId, clientStrKey))!"" /> 
22                         
23                        <#assign itemIndex = itemIndex + 1 /> 
24                        <#assign itemMasterName = article["title"]!"" />  
25     
26                        <div class="corporate--v3--slider--v1--item"> 
27                            <div class="corporate--v3--slider--v1--info"> 
28                                <#if articleClient != ""> 
29                                    <#assign clientName = mlxJournalHelperService.getStructureFieldValue(articleClient, "name", "${locale}")?string /> 
30                                    <h3 class="corporate--v3--slider--v1--item-title">${clientName}</h3> 
31                                <#else> 
32                                    <#assign clientName = articleName> 
33                                </#if> 
34                                <#if articleName?has_content> 
35                                    <p class="corporate--v3--slider--v1--item-subtitle">${articleName}</p> 
36                                </#if> 
37                                <#if articleDescription?has_content> 
38                                    <p class="corporate--v3--slider--v1--item-description">${articleDescription?truncate(350, '...')} 
39                                        <a href="${articleUrl}" title="${clientName}" class="corporate--v3--slider--v1--item-link" data-gtm-event="click" data-gtm-event-click-category="[pageMaster]_Case_Study" data-gtm-event-label="${itemIndex}_/Case-study/Detail/${clientName}/${itemMasterName}"><@corporate.mlxlanguage key="mlx.search.article.readmore" /></a> 
40                                    </p> 
41                                </#if> 
42                            </div> 
43 
44                                <#assign articleImageContent = articleValues["list_imageFieldSet"]!"{}"  /> 
45                                <#assign articleImageContent = articleImageContent.list_image!""  /> 
46    <#assign imgWidth = '640'> 
47                                <#if articleImageContent?has_content> 
48                                    <#assign articleImage = jsonFactoryUtil.createJSONObject(articleImageContent) /> 
49                                    <#if articleImage?has_content> 
50                                         
51                                        <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) /> 
52                                        <#assign articleImageUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
53                                        <#assign articleImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
54                                        <#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
55                                         
56                                        <div class="corporate--v3--slider--v1--thumbnail"> 
57                                         
58                                            <#assign articleVideoContent =  (mlxJournalHelperService.getStructureFieldValue(article, "video_gallery_fileFieldSet", "${locale}"))![] /> 
59 
60                                            <#if articleVideoContent?first.video_gallery_file?has_content> 
61                             										<#assign articleVideoJSON = jsonFactoryUtil.createJSONObject(articleVideoContent?first.video_gallery_file) /> 
62                    														<#assign articleVideoUUID = articleVideoJSON.getString("uuid")!"" /> 
63																							<#if articleVideoUUID != ""> 
64                                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleVideoUUID, globalGroupId) /> 
65                                                <#assign articleVideoUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
66                                                <#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
67                                                 
68                                                <#if youtubeEmbeddedCode?has_content> 
69                                                    <#assign htmlModalAttributes='data-fancybox="video-gallery-${curEntry?index}" data-type="iframe" data-src="https://www.youtube.com/embed${youtubeEmbeddedCode}" data-caption="${articleName}"' /> 
70                                                <#else> 
71                                                    <#assign htmlModalAttributes='data-fancybox="video-gallery-${curEntry?index}" data-type="html5video" data-src="${articleVideoUrl}" data-thumb="${articleImageUrl}" data-caption="${articleName}"' /> 
72                                                </#if> 
73     
74                                                <a href="#" class="corporate--v3--slider--v1--video-container" data-has-modal="true" ${htmlModalAttributes} data-gtm-event="modal" data-gtm-event-label="${articleImageUrl}"> 
75                                                    <figure class="corporate--v3--slider--v1--figure"> 
76                                                        <div class="corporate--v3--slider--v1--container-icon"> 
77                                                            <#assign images_folder = cdn + "/o/corporate-theme/images" /> 
78                                                            ${corporate.img(images_folder + '/common/th-play2.png', false,'data-role="play-btn" class="corporate--v3--slider--v1--video-icon" alt="play"')} 
79                                                        </div> 
80                                                        ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true,  
81														'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
82																	 cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image corporate--v3--slider--v1--item-image-youtube"')}                                                    </figure>   
83                                                </a> 
84																									<#else>		 
85																								<figure class="corporate--v3--slider--v1--figure"> 
86                                                    ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true,  
87                                                    'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
88															     cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image"')}                                                </figure> 
89                                             </#if> 
90                                            <#else> 
91     
92                                                <figure class="corporate--v3--slider--v1--figure"> 
93                                                    ${corporate.img(cdn + articleImageUrl + urlParamConcat + 'imwidth="'+ imgWidth + '"', true, 
94                                                    'srcset="' + cdn + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
95                                                                 cdn + articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w" alt="' + clientName + '"', 'title="' + clientName + '"', 'class="corporate--v3--slider--v1--item-image"')}                                                </figure> 
96     
97                                            </#if> 
98     
99                                        </div> 
100     
101                                    </#if> 
102                                </#if> 
103     
104                        </div> 
105     
106                    </#list> 
107                </div> 
108            <#assign pcasesMasterId=56006 /> <#-- referencias--> 
109            <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
110            <#if pcasesLayout == "" > 
111                <#assign pcasesMasterId=64015 /> <#-- clientes--> 
112                <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
113            </#if> 
114            <#assign pcasesUrl = pcasesLayout.getFriendlyURL() /> 
115                <a href="${pcasesUrl}" title='<@corporate.mlxlanguage key="mlx.practical-case.show-more" />' class="corporate--v3--slider--v1--viewmore" data-gtm-event="click" data-gtm-event-click-category="[pageMaster]_Case_Study" data-gtm-event-label="/Case-study"><@corporate.mlxlanguage key="mlx.practical-case.show-more" /></a> 
116     
117            </div> 
118        </div> 
119    </#if> 
120</#if> 
121<style> /*Fix Pagination*/ 
122    .lfr-pagination{ 
123        display: flex; 
124        justify-content: space-between; 
125        align-items: center; 
126
127     
128    .lfr-pagination .lfr-pagination-buttons { 
129        margin-top:0!important; 
130        padding: 0; 
131
132    @media (max-width: 960px){ 
133        .lfr-pagination{ 
134            flex-direction: column-reverse; 
135
136
137</style> 

FEATURED PRODUCT

Autonomous Mobile Robots (AMRs) Autonomous Mobile Robots (AMRs)

AUTONOMOUS MOBILE ROBOTS (AMRs)

The robotic solution that streamlines internal goods transport

Automate internal material flows with Mecalux’s innovative range of AMRs. Expedite multiple intralogistics operations and boost warehouse productivity with intelligent vehicles designed to operate independently.

Discover our AMRs

MECALUX IN NUMBERS

  • 55 years

    55 years

    of experience

  • commercial network

    +70 countries

    in commercial network

  • 11 production centres

    11 production

    centres

  • 7 R&D centres

    7 R&D centres

    for technological development

An error occurred while processing the template.
Java method "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl.getStructureFieldValues(com.liferay.journal.model.JournalArticle, String)" threw an exception when invoked on com.mecalux.util.service.impl.MlxJournalHelperServiceImpl object "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl@5b4d0a0b"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign articleValues = mlxJournalHel...  [in template "20101#20128#3282448" at line 34, column 21]
----
1<#--MKTG-1196: US Date format --> 
2<#if mlxConstants?has_content> 
3    <#assign domain = themeDisplay.getPortalDomain() /> 
4    <#assign dateFormat = "dd MMM yyyy"/> 
5    <#if (domain?contains("us")) || (domain?contains("interlake")) > 
6        <#assign dateFormat = "MMMMMMMMM d, yyyy" /> 
7    </#if> 
8    <#if entries?has_content> 
9        <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
10        <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
11     
12        <div class="corporate--v3--slider--v2" data-gtm-block-name="News"> 
13            <div class="corporate--v3--slider--v2--container"> 
14                <#assign insightsMasterId = 58007 /> 
15                <#assign insights = (mlxMastersHelperService.getLayoutByMasterAndGroup(insightsMasterId, groupId))!{} /> 
16                <#assign insightsName = (insights.getName())!"" /> 
17                <#assign insightsUrl = (insights.getFriendlyURL())!"" /> 
18                <h2 class="corporate--v3--slider--v2--title">${insightsName}</h2> 
19                <a href="${insightsUrl}" title='<@corporate.mlxlanguage key="mlx.newsv3.go-to-news" />' class="corporate--v3--slider--v2--viewmore"><@corporate.mlxlanguage key="mlx.newsv3.go-to-news" /></a> 
20            </div> 
21            <div class="corporate--v3--slider--v2--slider" data-gtm-block-name="News" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--v3--slider--v2--slider", "navPosition": "bottom", "mouseDrag": true, "loop": false, "gutter": 10, "edgePadding": 40, "controls": false, "fixedWidth": 250}'> 
22                <#list entries as entry> 	 
23                     
24                    <#--StrKeys--> 
25                    <#assign practicalCaseStrKey = "PRACTICAL-CASE-STR" /> 
26                    <#assign articleStrKey = "ARTICLE-STR" /> 
27                    <#assign manualStrKey = "MANUAL-DE-ALMACENAJE-STR" /> 
28                    <#assign videoStrKey = "VIDEO-STR" /> 
29                    <#assign blogStrKey = "BLOG-POST-STR" /> 
30                    <#assign interviewStrKey = "INTERVIEW-STR" /> 
31 
32                     
33                    <#assign article = mlxAssetHelperService.getJournalArticleByEntry(entry) /> 
34                    <#assign articleValues = mlxJournalHelperService.getStructureFieldValues(article, "${locale}")  /> 
35                    <#assign articleName = (articleValues["name"]?string)!"" /> 
36                    <#assign articleImageContent = (articleValues["image_list"])!{}  /> 
37     
38                    <#assign currStr = article.getDDMStructure().getStructureKey() /> 
39                    <#if currStr == practicalCaseStrKey> 
40                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.pcases' /></#assign> 
41                        <#assign articleImageContent = (articleValues.list_imageFieldSet["list_image"])!{}  /> 
42                    <#elseif currStr == articleStrKey> 
43                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.news' /></#assign> 
44                    <#assign articleName = (articleValues["article_name"]?string)!"" /> 
45                    <#elseif currStr == manualStrKey> 
46                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> 
47                    <#elseif currStr == videoStrKey> 
48                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.resources.videos.title' /></#assign> 
49                        <#assign videoFieldContent = (articleValues["video"])!{}  /> 
50 
51                        <#if videoFieldContent?has_content> 
52													  <#assign videoFieldUuid = jsonFactoryUtil.createJSONObject(videoFieldContent).getString("uuid") /> 
53                            <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoFieldUuid, globalGroupId) /> 
54                            <#assign articleImageContent = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" /> 
55                        </#if> 
56 
57                    <#elseif currStr == blogStrKey> 
58                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.blog' /></#assign> 
59                        <#assign articleImageContent = (articleValues["list_image"])!{}  /> 
60                    <#elseif currStr == interviewStrKey> 
61                        <#assign ribbonText><@corporate.mlxlanguage key='mlx.interviews.title' /></#assign> 
62                        <#assign articleImageContent = (articleValues.hero["hero_image"]?eval)!{} /> 
63                        <#assign articleName = (articleValues.hero["hero_title"]?string)!"" /> 
64                    </#if> 
65                     
66                    <#assign articleUrl = mlxUrlUtilService.getUrlByJournalArticle(article, "${locale}", groupId)?string /> 
67                     
68                    <#if articleImageContent?has_content> 
69                        <#assign articleImage = jsonFactoryUtil.createJSONObject(articleImageContent) /> 
70                    </#if> 
71     
72                    <#assign article = mlxAssetHelperService.getJournalArticleByEntry(entry) /> 
73     
74                    <#assign articleDate = dateUtil.getDate(article.getDisplayDate(), dateFormat, locale)  /> 
75 
76                    <#if articleImage?has_content> 
77                        <div class="corporate--v3--slider--v2--item"> 
78                            <a href="${articleUrl}" title="${articleName}" class="corporate--v3--slider--v2--item-link-box"> 
79                                <#assign articleImageUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(articleImage.uuid, locale)!"" /> 
80                                                             
81                                <#if articleImage.uuid?has_content > 
82                                    <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) /> 
83                                    <#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
84                                    <#if docUrl == ''> 
85                                        <#assign imgUrl = cdn + articleImageUrl /> 
86                                    <#else> 
87                                        <#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
88                                    </#if> 
89 
90                                    <#assign imgWidth = '320'> 
91                                    <#assign imgTitle = articleName> 
92                                    <#assign imgAlt = articleName> 
93                                    <#assign imgClass = 'corporate--v3--slider--v2--item-image'> 
94                                    <#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
95                                    ${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
96                                                                    'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"')} 
97                                    <span class="corporate--v3--slider--v2--item-upper-heading">${ribbonText}</span> 
98                                    <span class="corporate--v3--slider--v2--item-date">${articleDate}</span> 
99                                    <p class="corporate--v3--slider--v2--item-description">${articleName}</p> 
100                                    <span class="corporate--v3--slider--v2--item-link"><@corporate.mlxlanguage key="mlx.newsv3.read" /></span> 
101                                </#if> 
102                            </a> 
103                        </div>  
104                    </#if> 
105     
106                </#list> 
107            </div> 
108        </div> 
109     
110    </#if> 
111</#if> 

We are wherever your warehouse is

We have offices in 23 countries

SEE ALL OUR COMMERCIAL OFFICES
TURKEYOffice in Istanbul
SLOVENIAOffice in Brnik
ROMANIAOffice in Bucharest
CROATIA
POLANDOffices in Gliwice, Gdańsk, Kraków, Poznań, Warsaw and Wrocław
SLOVAKIAOffice in Bratislava
CZECH REPUBLICOffice in Prague
ITALYOffices in Milan, Padua, Rome and Turin
GERMANYOffice in Dormagen
NETHERLANDSOffice in Amsterdam
BELGIUMOffice in Brussels
FRANCEOffices in Paris, Aix-en-Provence, Bordeaux, Lille, Lyon, Nantes - Rouen, Toulouse and Strasbourg
UNITED KINGDOMOffice in Birmingham
SPAINOffices in Barcelona, Alicante, Bilbao, Córdoba, Gijón, La Coruña, Las Palmas, Madrid, Murcia, Palencia, Palma De Mallorca, Pamplona, San Sebastián, Seville, Tenerife, Valencia, Vitoria-Gasteiz and Zaragoza
PORTUGALOffices in Lisbon and Porto
BRAZILOffice in Hortolândia
URUGUAYOffice in Canelones
ARGENTINAOffice in Buenos Aires
COLOMBIAOffice in Bogotá and Cali
CHILEOffice in Santiago
MEXICOOffices in Tijuana, Guadalajara, Hermosillo, Matamoros, Mérida, Mexico City, Puebla and Monterrey
UNITED STATESOffices in Chicago, Dallas, Pontiac, San Diego and Sumter
We are wherever your warehouse is
background contact

CONTACT US

Leave us your information and one of our experts will assist you

I have read and accept the terms and conditions of the data protection policy.

Yes, I would like to receive advertising material for products and/or storage solutions and related goods offered by Mecalux. (Optional)